package com.example.demo.service;

import com.example.demo.pojo.request.CronTriggerCreateRequest;
import com.example.demo.pojo.response.QuartzCronTriggerResponse;
import com.example.demo.pojo.response.QuartzJobDetailResponse;

import java.util.List;

/**
 * Quartz 服务层
 *
 * @author Ethan Blake
 * @version 1.0
 * @since 2024/8/27
 */
public interface QuartzSchedulerService {

    /**
     * 获取所有的 JobDetail 信息
     *
     * @return JobDetail 信息列表
     */
    List<QuartzJobDetailResponse> getAllJobDetails();


    /**
     * 获取所有的 Trigger 信息
     *
     * @return Trigger 信息列表
     */
    List<QuartzCronTriggerResponse> getAllTriggers();

    /**
     * 暂停一个任务
     *
     * @param jobName  任务名称
     * @param jobGroup 任务分组
     */
    void pauseJob(String jobName, String jobGroup);


    /**
     * 恢复一个任务
     *
     * @param jobName  任务名称
     * @param jobGroup 任务分组
     */
    void resumeJob(String jobName, String jobGroup);


    /**
     * 暂停一个调度器
     *
     * @param triggerName  调度器名称
     * @param triggerGroup 调度器分组名称
     */
    void pauseTrigger(String triggerName, String triggerGroup);


    /**
     * 恢复一个调度器
     *
     * @param triggerName  调度器名称
     * @param triggerGroup 调度器分组名称
     */
    void resumeTrigger(String triggerName, String triggerGroup);

    /**
     * 动态修改 CronTrigger 的 cronExpression
     *
     * @param triggerName       Trigger 名称
     * @param triggerGroup      Trigger 组名称
     * @param newCronExpression 新的 cron 表达式
     */
    void updateCronTrigger(String triggerName, String triggerGroup, String newCronExpression);

    /**
     * 创建一个新的触发器并将其添加到Quartz调度器中。
     *
     * @param request 包含触发器创建所需信息的TriggerCreateRequest对象
     */
    void createCronTrigger(CronTriggerCreateRequest request);

    /**
     * 删除一个Quartz Trigger(触发器)
     *
     * @param triggerName  任务调度器名称
     * @param triggerGroup 任务调度器分组
     */
    void deleteTrigger(String triggerName, String triggerGroup);
}
